/*******************************************************************************
 * Copyright (c) 2007, 2009 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 ******************************************************************************/

package org.eclipse.ui.tests.commands;

//import java.io.ByteArrayInputStream;
//import java.io.InputStream;

//import org.eclipse.core.commands.NotHandledException;
//import org.eclipse.core.resources.IFile;
//import org.eclipse.core.resources.IProject;
//import org.eclipse.core.runtime.NullProgressMonitor;
//import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.handlers.IHandlerService;
//import org.eclipse.ui.ide.IDE;
import org.eclipse.ui.tests.api.workbenchpart.MenuContributionHarness;
//import org.eclipse.ui.tests.harness.util.FileUtil;
import org.eclipse.ui.tests.harness.util.UITestCase;

/**
 * @since 3.3
 *
 */
public class ActionDelegateProxyTest extends UITestCase {
	/**
	 *
	 */
	private static final String DELEGATE_ACTION_SET_ID = "org.eclipse.ui.tests.delegateActionSet";
	private static final String INC_COMMAND = "org.eclipse.ui.tests.incMenuHarness";
	private static final String VIEW_ID = "org.eclipse.ui.tests.api.MenuTestHarness";

	private static final String GO_COMMAND = "org.eclipse.ui.tests.simplyGo";
	private static final String STAY_COMMAND = "org.eclipse.ui.tests.simplyStay";

	/**
	 * @param testName
	 */
	public ActionDelegateProxyTest(String testName) {
		super(testName);
	}

	public void testViewDelegate() throws Exception {
		IWorkbenchWindow window = openTestWindow();
		IWorkbenchPage page = window.getActivePage();
		assertNull(page.findView(VIEW_ID));
		IViewPart view = page.showView(VIEW_ID);
		assertNotNull(view);
		assertTrue(view instanceof MenuContributionHarness);
		MenuContributionHarness mch = (MenuContributionHarness) view;
		assertEquals(0, mch.getCount());
		IHandlerService service = (IHandlerService) window.getService(IHandlerService.class);
		service.executeCommand(INC_COMMAND, null);
		assertEquals(1, mch.getCount());
		service.executeCommand(INC_COMMAND, null);
		assertEquals(2, mch.getCount());

		page.hideView(view);
		IViewPart view2 = page.showView(VIEW_ID);
		assertFalse(view==view2);
		view = view2;
		assertNotNull(view);
		assertTrue(view instanceof MenuContributionHarness);
		mch = (MenuContributionHarness) view;
		assertEquals(0, mch.getCount());
		service.executeCommand(INC_COMMAND, null);
		assertEquals(1, mch.getCount());
		service.executeCommand(INC_COMMAND, null);
		assertEquals(2, mch.getCount());
	}

//	public void testWWActionDelegate() throws Exception {
//		IWorkbenchWindow window = openTestWindow();
//		window.getActivePage().showActionSet(DELEGATE_ACTION_SET_ID);
//		IHandlerService service = (IHandlerService) window.getService(IHandlerService.class);
//		assertFalse(SimplyGoActionDelegate.executed);
//		service.executeCommand(GO_COMMAND, null);
//		assertTrue(SimplyGoActionDelegate.executed);
//	}

	private static final String contents = "one\ntwo\nthree\n";

//	public void testEditorActionDelegate() throws Exception {
//		IWorkbenchWindow window = openTestWindow();
//		window.getActivePage().closeAllEditors(false);
//		IHandlerService service = (IHandlerService) window.getService(IHandlerService.class);
//		assertFalse(EditorActionDelegate.executed);
//		EditorActionDelegate.part = null;
//		try {
//			service.executeCommand(STAY_COMMAND, null);
//			fail("the command is not yet handled");
//		} catch (NotHandledException e) {
//			// good
//		}
//		assertFalse(EditorActionDelegate.executed);
//		assertNull(EditorActionDelegate.part);
//
//		IProject proj = FileUtil.createProject(GO_COMMAND);
//		IFile file = FileUtil.createFile("test.txt", proj);
//		InputStream in = new ByteArrayInputStream(contents.getBytes());
//		file.setContents(in, true, false, new NullProgressMonitor());
//		IEditorPart editor1 = IDE.openEditor(window.getActivePage(), file);
//		assertNotNull(editor1);
//		assertEquals("org.eclipse.ui.DefaultTextEditor", editor1.getSite().getId());
//
//		file = FileUtil.createFile("test2.txt", proj);
//		in = new ByteArrayInputStream(contents.getBytes());
//		file.setContents(in, true, false, new NullProgressMonitor());
//		IEditorPart editor2 = IDE.openEditor(window.getActivePage(), file);
//		assertNotNull(editor2);
//		assertEquals("org.eclipse.ui.DefaultTextEditor", editor2.getSite().getId());
//
//		service.executeCommand(STAY_COMMAND, null);
//		assertTrue(EditorActionDelegate.executed);
//		assertEquals(editor2, EditorActionDelegate.part);
//
//		window.getActivePage().activate(editor1);
//		processEvents();
//		service.executeCommand(STAY_COMMAND, null);
//		assertTrue(EditorActionDelegate.executed);
//		assertEquals(editor1, EditorActionDelegate.part);
//
//	}
}
